package options_pattern

// 函数选项模式（Functional Options Pattern） ，也称为选项模式（Options Pattern），是一种创造性的设计模式，允许你使用接受零个或多个函数作为参数的可变构造函数来构建复杂结构

// Options 模式
type FunctionalDemo struct {
	Name    string
	Age     int
	IdNum   string
	Address string
}

// 为什么有options，还需要传入name
// 为了保证必传参数，可以在NewPeople中传入name
func NewFunctionalDemo(name string, options ...func(*FunctionalDemo)) *FunctionalDemo {
	p := &FunctionalDemo{
		Name: name,
	}

	for _, option := range options {
		option(p)
	}
	return p
}

func WithAge(age int) func(*FunctionalDemo) {
	return func(p *FunctionalDemo) {
		p.Age = age
	}
}
